连载一:go安装配置及入门

您所在的位置:网站首页 filesgo下载 最新 连载一:go安装配置及入门

连载一:go安装配置及入门

2023-03-22 12:23| 来源: 网络整理| 查看: 265

go语言标准库地址:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国

go安装

国内下载地址:Go下载 - Go语言中文网 - Golang中文社区

下载最新版本,这里我下载 https://studygolang.com/dl/golang/go1.20.2.windows-amd64.msi 

安装好后,打开cmd,输入go version可以查看go的版本信息

go配置环境变量

右击此电脑–>属性–>高级系统设置–>环境变量

GOROOT D:\Program Files\Go

GOPATH D:\go

用户变量也添加GOPATH。

GOPATH D:\go

go env 配置 最后还有一些go的env变量需要配置:

GO111MODULE:包管理模式,auto即可,可以同时使用MODULE和GOPATH模式(非mod项目也可以build 解决 go: go.mod file not found in current directory or any parent directory)。

GOPROXY:配置包代理镜像,使用国内的镜像源代替

GONOPROXY/GONOSUMDB:配置私有模块,公司内根据需要配置

打开cmd,尝试阶段配置前两个即可

go env -w GO111MODULE=auto go env -w GOPROXY=https://goproxy.cn,direct #公司内根据需要配置 go env -w GONOPROXY=xxx.xxx go env -w GONOSUMDB=xxx.xxx

vscode扩展go

把D:\Program Files\Go目录下文件都拷贝到在d:\go工作目录下

在D:\go\src\hello\目录下

编写go第一个程序main.go

package main import "fmt" func main() { fmt.Println("helle world go") }

cmd,执行go run main.go 

打印 hello word go,项目运行成功

go开发目录

go语言特点

自动立即回收更丰富的内置类型函数多返回值错误处理匿名函数和闭包类型和接口并发编程反射语言交互性

1.go没有命名空间概念,只有包package,引用的包名比较简短import “fmt”

2.go没有class类的概念,只有type name struct{} 结构体,结构体只属性没有方法

3.go中但凡声明或引用都要使用,不使用会报错,go中检查比较严谨

go的关键词

go的保留字

go语言定义

go语言作用域

GO中的fmt-向外输出

GO中的fmt-获取输入

 GO中的fmt-中printf占位符

 

GO中的fmt-中printf占位符

 

GO中的fmt-中printf占位符

 

 GO中的fmt-中printf占位符

 

 go语言运算符

 

 

go中包分类

go中import和package 

 go中init和main

 init相当于一个构造函数,针对go的包而显示的

作用:是用来初始化变量、参数等

1.init 可以定义多个 main只能是一个

2.init执行顺序:

  1)根据引入的包的顺序执行init

  2)在包目录下.go中的init加载是根据文件名的顺序执行

  3)一个文件中有多个init时,从上向下加载顺序执行

 

 先是引入包->加载常量->加载变量->加载init方法->最后加载main

练习: 

GO中的指针

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。

&  :   取地址

*   :   根据地址取值 

当一个指针被定义后没有分配到任何变量时,它的值为 nil

var p *string

fmt.Println(p)

fmt.Printf("p的值是%v\n", p)

流程控制

如果:if-else 选择:Switch 循环:for 结束与跳过:break - continue 跳转:goto

变量 

 常量

数据类型

 

 数据类型

 数据类型-整数类型

数据类型-布尔类型

 

数据类型-浮点类型

 

数据类型-字符串类型

 

数据类型-字段常用函数

 

数据类型-byte和rune类型

 

 数据类型-强转strconv 

数组定义 == 一维数组

var arr0 [5]int = [5]int{1, 2, 3} var arr1 = [5]int{1, 2, 3, 4, 5} var arr2 = [...]int{1, 2, 3, 4, 5, 6} var str = [5]string{3: "hello world", 4: "tom"} d := [...]struct { name string age uint8 }{ {"user1", 10}, // 可省略元素类型。 {"user2", 20}, // 别忘了最后一行的逗号。 }

数组定义 == 多维数组

全局 var arr0 [5][3]int var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}} 局部: a := [2][3]int{{1, 2, 3}, {4, 5, 6}} b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 纬度不能用 "..."。

数组定义相关函数

len -- 来求长度,比如string、array、slice、map、channel ,返回长度 var usernames [5]string = [5]string{"shineyork", "cara"} fmt.Println(len(usernames))

切片

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大

切片 特点

切片:切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。 切片的长度可以改变,因此,切片是一个可变的数组。 切片遍历方式和数组一样,可以用len()求长度。表示可用元素数量,读写操作不能超过该限制。 cap可以求出slice最大扩张容量,不能超出数组限制。0


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3